package xx.services.page.inter;

import javax.ws.rs.FormParam;
import javax.ws.rs.PathParam;

/**
 * 页面管理服务接口
 * 
 * @Path (Constants.RESTFUL_ROOT_PATH + "/page")
 * @author chenxiang 2010-12-20
 */
public interface IPageInterface
{
    /**
     * 增加一个新页面
     * 
     * @POST
     * @param pagekey-@FormParam("pagekey")
     *            页面唯一key
     * @param title-@FormParam("title")
     *            页面标题
     * @param keywords-@FormParam("keywords")
     *            页面Meta keywords属性
     * @param description-@FormParam("description")
     *            页面Meta 描述属性
     * @param templet-@FormParam("templet")
     *            页面模板代码
     * @param demo-@FormParam("demo")
     *            页面示例代码
     * @return 新页面实体
     * @author chenxiang 2010-12-20
     */
    public String add(@FormParam("pagekey")
    String pagekey, @FormParam("title")
    String title, @FormParam("keywords")
    String keywords, @FormParam("description")
    String description, @FormParam("templet")
    String templet, @FormParam("demo")
    String demo);

    /**
     * 获取一个页面
     * 
     * @GET
     * @Path ("/{page_id}")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @return 页面实体
     * @author chenxiang 2010-12-20
     */
    public String get(@PathParam("page_id")
    String pageId);

    // /**
    // * 获取一个页面
    // *
    // * @GET
    // * @Path ("/{pagekey: [a-zA-Z0-9].*}")
    // * @param pagekey-@PathParam("pagekey")
    // * 页面ID
    // * @return 页面实体
    // * @author chenxiang 2010-12-20
    // */
    // public String get(@PathParam("pagekey")
    // String pagekey);

    /**
     * 修改页面
     * 
     * @PUT
     * @Path ("/{page_id}")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @param pagekey-@FormParam("pagekey")
     *            页面唯一key
     * @param title-@FormParam("title")
     *            页面标题
     * @param keywords-@FormParam("keywords")
     *            页面Meta keywords属性
     * @param description-@FormParam("description")
     *            页面Meta 描述属性
     * @param templet-@FormParam("templet")
     *            页面模板代码
     * @param demo-@FormParam("demo")
     *            页面示例代码
     * @return 新页面实体
     * @author chenxiang 2010-12-20
     */
    public String update(@PathParam("page_id")
    long pageId, @FormParam("pagekey")
    String pagekey, @FormParam("title")
    String title, @FormParam("keywords")
    String keywords, @FormParam("description")
    String description, @FormParam("templet")
    String templet, @FormParam("demo")
    String demo);

    /**
     * 删除页面
     * 
     * @DELETE
     * @Path ("/{page_id}")
     * @param pageId-@PathParam("page_id")
     *            页面ID，多个ID用“_”隔开
     * @return true-删除成功，string-其他删除失败（string就是失败原因）
     * @author chenxiang 2010-12-20
     */
    public String delete(@PathParam("page_id")
    String pageId);

    /**
     * 描述：删除布局demo。<br>
     * 
     * @DELETE
     * @Path ("/{page_id}/layout/{layout_id}")
     * @param layoutId-@PathParam("layout_id")
     *            布局ID，多个布局ID用“_”隔开
     * @return true-删除成功，string-其他删除失败（string就是失败原因）
     * @author chenxiang
     */
    public String deleteLayout(@PathParam("page_id")
    String pageId, @PathParam("layout_id")
    String layoutId);

    /**
     * 获取页面列表
     * 
     * @GET
     * @return 页面实体RowSet列表
     * @author chenxiang 2010-12-20
     */
    public String gets();

    /**
     * 把页面{page_id}设置为首页<br>
     * 注：把当前页面设置为首页时，要把其他页面的首页状态标志（is_index）恢复为false状态
     * 
     * @PUT
     * @Path ("/{page_id}/index")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @author chenxiang 2010-12-20
     * @return true-设置成功，string-其他设置失败（string就是失败原因）
     */
    public String setIndex(@PathParam("page_id")
    long pageId);

    /**
     * 新增布局Layout，包含布局Item模板数据
     * 
     * @POST
     * @Path ("/{page_id}/layout")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @param layout-@FormParam("layout")
     *            布局demo的Json字符串
     * @return 增加成功的布局实体集
     * @author chenxiang 2010-12-20
     */
    public String addLayout(@PathParam("page_id")
    long pageId, @FormParam("layout")
    String layout);

    /**
     * 更新页面下第一级页面布局的排列顺序<br>
     * 注：需要清理无用的layout，也就是layoutId与p_layout_link表中page_id下对应不上的layout_id
     * 
     * @PUT
     * @Path ("/{page_id}/layout/{layout_id}")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @param layoutId-@FormParam("layout_id")
     *            当前页面中的所有第一级布局的ID，ID用“_”隔开，排列顺序就按ID的先后顺序排序
     * @return true-成功，string-其他表示失败（string就是失败原因）
     * @author chenxiang 2010-12-20
     */
    public String updateLayoutSequence(@PathParam("page_id")
    long pageId, @FormParam("layout_id")
    String layoutId);

    /**
     * 获取当前页面下的所有一级布局
     * 
     * @GET
     * @Path ("/{page_id}/layout")
     * @param pageId-@PathParam("page_id")
     *            页面ID
     * @return 布局实体RowSet列表
     * @author chenxiang 2010-12-21
     */
    public String getLayouts(@PathParam("page_id")
    long pageId);

    /**
     * 新页面生成为HTML文件，文件名为{pagekey}.html
     * 
     * @GET
     * @Path ("/{page_id}/html")
     * @param pageId
     *            -@PathParam("page_id") 页面ID
     * @return true-成功，string-其他表示失败（string就是失败原因）
     * @author chenxiang 2010-12-21
     */
    public String createHtml(@PathParam("page_id")
    long pageId);

    /**
     * 新页面生成为HTML文件，文件名为{pagekey}.html
     * 
     * @POST
     * @Path ("/{page_id}/html")
     * @param pageId
     *            -@PathParam("page_id") 页面ID
     * @return true-成功，string-其他表示失败（string就是失败原因）
     * @author chenxiang 2010-12-21
     */
    public String createHtml(@PathParam("page_id")
    String pageId);

    /**
     * 将布局layoutId排在布局afterId的后边
     * 
     * @PUT
     * @Path ("/{page_id}/layout/{layout_id}/after/{after_id}")
     * @param pageId
     *            -@PathParam("page_id") 页面ID
     * @param layoutId
     *            -@PathParam("layout_id") 当前布局ID
     * @param afterId
     *            -@PathParam("after_id") 参照ID
     * @return
     * @author 陈祥 2011-9-11
     */
    public String layoutAfter(long pageId, long layoutId, long afterId);

    /**
     * 将布局layoutId排在布局beforeId的前边
     * 
     * @PUT
     * @Path ("/{page_id}/layout/{layout_id}/before/{before_id}")
     * @param pageId
     *            -@PathParam("page_id") 页面ID
     * @param layoutId
     *            -@PathParam("layout_id") 当前布局ID
     * @param beforeId
     *            -@PathParam("before_id") 参照ID
     * @return
     * @author 陈祥 2011-9-11
     */
    public String layoutBefore(long pageId, long layoutId, long beforeId);
}